/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package presentacion;

import Auxiliares.Cache;
import Auxiliares.Contantes;
import Auxiliares.FuncionesComunes;
import java.io.File;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import negocio.ControladorDetalleFactura;
import negocio.ControladorFactura;
import negocio.ControladorProducto;
import negocio.Producto;

/**
 *
 * @author Jonathan Mendez
 */
public class PanelPedidos extends javax.swing.JPanel implements Contantes{

    public PanelPrincipal _PanelPrincipal;
    private static PanelPedidos _Instancia;
    public ControladorProducto _ControladorProducto = ControladorProducto.getInstancia();
    private ControladorFactura _ControladorFactura = ControladorFactura.getInstancia();
    private ControladorDetalleFactura _ControladorDetalleFactura = ControladorDetalleFactura.getInstancia();
    private PanelBusquedaUsuario _PanelBusquedaUsuario = PanelBusquedaUsuario.getInstancia();
    private PanelPagarPedido _PanelPagarPedido = PanelPagarPedido.getInstancia();
    private Cache _Cache = Cache.getInstancia();
    private Vector<Producto> _resp;
    private int _productoEscogido= -1;
    public int _guardarFactura=-1;
    public float _TotalPagado=1, _TotalFactura=1;
    private File imagen = null;
    
    /**
     * Creates new form PanelPedidos
     */
    public PanelPedidos() {
        initComponents();
        lblFecha.setText("Fecha: "+Auxiliares.FuncionesComunes.Fecha());
        buscarProducto();
    }

    public static PanelPedidos getInstancia(){
        if (_Instancia == null)
            _Instancia = new PanelPedidos();
        return _Instancia;
    }
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblCliente = new javax.swing.JLabel();
        lblFecha = new javax.swing.JLabel();
        jtpMantenimiento = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jLabel7 = new javax.swing.JLabel();
        txtBuscar = new javax.swing.JTextField();
        scrollTabla = new javax.swing.JScrollPane();
        tablaResultadosBusqueda = new javax.swing.JTable();
        jDesktopPane1 = new javax.swing.JDesktopPane();
        jLabel8 = new javax.swing.JLabel();
        scrollTabla1 = new javax.swing.JScrollPane();
        tablaDetallePedido = new javax.swing.JTable();
        jLabel9 = new javax.swing.JLabel();
        txtDescripcion = new javax.swing.JTextField();
        jLabel10 = new javax.swing.JLabel();
        txtCantidad = new javax.swing.JTextField();
        btnAgregar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        txtSubtotal = new javax.swing.JTextField();
        jLabel11 = new javax.swing.JLabel();
        btnSalir = new javax.swing.JButton();
        btnVender = new javax.swing.JButton();

        setMaximumSize(new java.awt.Dimension(900, 700));
        setMinimumSize(new java.awt.Dimension(900, 700));

        lblCliente.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        lblCliente.setText("Cliente:");
        lblCliente.setName("lblCliente");

        lblFecha.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        lblFecha.setText("Fecha:");
        lblFecha.setName("lblFecha");

        jtpMantenimiento.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        jLabel7.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel7.setText("Nombre a buscar    :");
        jLabel7.setName("jLabel3");

        txtBuscar.setName("txtBuscar");
        txtBuscar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtBuscarKeyPressed(evt);
            }
        });

        scrollTabla.setAutoscrolls(true);

        tablaResultadosBusqueda.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        tablaResultadosBusqueda.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Nombre", "Precio", "Tipo", "Descripcion"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaResultadosBusqueda.setOpaque(false);
        tablaResultadosBusqueda.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaResultadosBusquedaMouseClicked(evt);
            }
        });
        tablaResultadosBusqueda.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                tablaResultadosBusquedaKeyPressed(evt);
            }
        });
        scrollTabla.setViewportView(tablaResultadosBusqueda);

        jLabel8.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel8.setText("Detalle del pedido");
        jLabel8.setName("jLabel3");

        scrollTabla1.setAutoscrolls(true);

        tablaDetallePedido.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        tablaDetallePedido.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nombre", "Precio", "Cantidad", "Total"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaDetallePedido.setToolTipText("");
        tablaDetallePedido.setOpaque(false);
        tablaDetallePedido.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tablaDetallePedido.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaDetallePedidoMouseClicked(evt);
            }
        });
        scrollTabla1.setViewportView(tablaDetallePedido);
        tablaDetallePedido.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);

        jLabel9.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel9.setText("Descripción:");
        jLabel9.setName("jLabel3");

        txtDescripcion.setName("txtDescripcion");

        jLabel10.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel10.setText("Cantidad:");
        jLabel10.setName("jLabel3");

        txtCantidad.setName("txtCantidad");

        btnAgregar.setText("Agregar");
        btnAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarActionPerformed(evt);
            }
        });

        btnEliminar.setText("Eliminar de Lista");
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });

        txtSubtotal.setText("0");
        txtSubtotal.setToolTipText("");
        txtSubtotal.setEnabled(false);
        txtSubtotal.setName("txtNombre");

        jLabel11.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel11.setText("Sub total de la orden:");
        jLabel11.setName("jLabel3");

        btnSalir.setText("Salir");
        btnSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalirActionPerformed(evt);
            }
        });

        btnVender.setText("Vender");
        btnVender.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVenderActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(scrollTabla)
                    .addComponent(scrollTabla1)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jDesktopPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 213, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(txtDescripcion)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(0, 0, Short.MAX_VALUE))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txtCantidad, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 262, Short.MAX_VALUE)
                                .addComponent(btnAgregar, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE))))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(txtBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 282, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(btnEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE, 218, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtSubtotal, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(btnVender, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnSalir, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(txtBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel7))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(scrollTabla, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel9)
                        .addGap(8, 8, 8)
                        .addComponent(txtDescripcion, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel10, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(txtCantidad, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(btnAgregar, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addComponent(jDesktopPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLabel8)
                .addGap(18, 18, 18)
                .addComponent(scrollTabla1, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(btnEliminar, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(txtSubtotal, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jLabel11))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 40, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnSalir, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnVender, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        jtpMantenimiento.addTab("Mantenimiento de Pedidos", jPanel1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblCliente)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(lblFecha)
                        .addGap(100, 100, 100))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jtpMantenimiento)
                        .addContainerGap())))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblCliente)
                    .addComponent(lblFecha))
                .addGap(19, 19, 19)
                .addComponent(jtpMantenimiento, javax.swing.GroupLayout.PREFERRED_SIZE, 579, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(69, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void tablaResultadosBusquedaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaResultadosBusquedaMouseClicked

        seleccionarFila();                
    }//GEN-LAST:event_tablaResultadosBusquedaMouseClicked

    private void tablaDetallePedidoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaDetallePedidoMouseClicked
        // TODO add your handling code here:
    }//GEN-LAST:event_tablaDetallePedidoMouseClicked

    private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarActionPerformed
        // TODO add your handling code here:
        if (FuncionesComunes.EsNumerico(txtCantidad.getText()) && !"".equals(txtCantidad.getText()))
        {
            int rowPedido = tablaDetallePedido.getRowCount()+1;
            String nombreProducto = tablaResultadosBusqueda.getModel().getValueAt(_productoEscogido, 0).toString();
            String precioProducto = tablaResultadosBusqueda.getModel().getValueAt(_productoEscogido, 1).toString();
            String cantidad = txtCantidad.getText();
            float totalFila = Integer.parseInt(cantidad) * Float.parseFloat(precioProducto);
        
            this.tablaDetallePedido.setVisible(true);
            //primero tenemos que decirle a la tabla, la cual se carga con un model, de cuantas filas será
            ((DefaultTableModel)tablaDetallePedido.getModel()).setRowCount(rowPedido);
            
            //cargamos la tabla
            tablaDetallePedido.setValueAt(nombreProducto, rowPedido-1, 0);
            tablaDetallePedido.setValueAt(precioProducto, rowPedido-1, 1);
            tablaDetallePedido.setValueAt(cantidad, rowPedido-1, 2);
            tablaDetallePedido.setValueAt(totalFila, rowPedido-1, 3);
            
            txtSubtotal.setText(String.valueOf((Float.parseFloat(txtSubtotal.getText())+totalFila)));
            
            FuncionesComunes.LimpiarTextBox(this, txtSubtotal);
            this.jDesktopPane1.setBorder(null);
        }
        else  
            JOptionPane.showMessageDialog(null, MENSAJE_VALOR_INCORRECTO, TITULO_ERRONEO, JOptionPane.ERROR_MESSAGE);
    }//GEN-LAST:event_btnAgregarActionPerformed

    private void txtBuscarKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBuscarKeyPressed
        // TODO add your handling code here:
        
        String producto=null;
            
            try 
            {
            if (evt.getKeyCode()==8)
                producto = txtBuscar.getText(0,txtBuscar.getText().length()-1);
            else
                producto = txtBuscar.getText()+evt.getKeyChar();
            } 
            catch(Exception ex)
            {}
            
            if ("".equals(producto))
                cargarTabla(_resp);
            else
                filtrarProductos(_resp, producto);
       
    }//GEN-LAST:event_txtBuscarKeyPressed

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        // TODO add your handling code here:
        DefaultTableModel modelo = (DefaultTableModel)tablaDetallePedido.getModel();
        
        if (tablaDetallePedido.getSelectedRowCount()>0)
        {
            float totalFila = Float.parseFloat(tablaDetallePedido.getModel().getValueAt(tablaDetallePedido.getSelectedRow(), 3).toString());
            
            txtSubtotal.setText(String.valueOf((Float.parseFloat(txtSubtotal.getText())-totalFila)));
            modelo.removeRow(tablaDetallePedido.getSelectedRow()); 
        }
    }//GEN-LAST:event_btnEliminarActionPerformed

    private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalirActionPerformed
        // TODO add your handling code here:
        this.setVisible(false);
        _PanelBusquedaUsuario.setVisible(true);
    }//GEN-LAST:event_btnSalirActionPerformed

    private void btnVenderActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVenderActionPerformed
        // TODO add your handling code here:
        this.setVisible(false);
        _PanelPagarPedido.txtTotal.setText(this.txtSubtotal.getText());
        _PanelPagarPedido.lblCliente.setText(this.lblCliente.getText());
        _PanelPagarPedido.setVisible(true);
        
    }//GEN-LAST:event_btnVenderActionPerformed

    private void tablaResultadosBusquedaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaResultadosBusquedaKeyPressed
        // TODO add your handling code here:
        seleccionarFila();
    }//GEN-LAST:event_tablaResultadosBusquedaKeyPressed

    public void guardarFactura()
    {
        if (_guardarFactura==1)
        {
            int idfactura = 0;
            boolean resul = _ControladorFactura.guardarFactura(_Cache.getIdClienteActual(),_TotalFactura,_TotalPagado);
            
            if(!resul)
            {
                JOptionPane.showMessageDialog(null, MENSAJE_FACTURA_GUARDADO, TITULO_FACTURA_REGISTRADA, JOptionPane.OK_OPTION); 
                return;
            }
            
            //borrar todo
            idfactura = _ControladorFactura.retornaUltimaFactura();
            _Cache.setIdFactura(idfactura);

            int cantidad = 0;
            String nombre = "";
            int filas = tablaDetallePedido.getRowCount();

            //Insertar detalle de factura
            for (int i=0; i<filas; i++)
            {
                nombre = tablaDetallePedido.getModel().getValueAt(i, 0).toString();
                cantidad = Integer.parseInt(tablaDetallePedido.getModel().getValueAt(i, 2).toString());

                resul = _ControladorDetalleFactura.guardarDetalleFactura(_Cache.getIdFactura(), nombre, cantidad);
            }

            if (!resul)
                JOptionPane.showMessageDialog(null, MENSAJE_ERROR_INSERTAR_VENTA, TITULO_ERROR_INSERTAR, JOptionPane.ERROR_MESSAGE); 
            
            JOptionPane.showMessageDialog(null, MENSAJE_FACTURA_GUARDADO, TITULO_FACTURA_REGISTRADA, JOptionPane.ERROR_MESSAGE); 
            
            FuncionesComunes.LimpiarTextBox(this);
            txtSubtotal.setText("0");
            eliminarFilasJtable(this.tablaDetallePedido);
        }
    }
    
    private void eliminarFilasJtable(JTable table)
    {
        int filas = table.getRowCount();

        for (int i=filas-1; i>=0; i--)
        {
            DefaultTableModel modelo = (DefaultTableModel)table.getModel();
            modelo.removeRow(i); 
        }
    }
    
    private void seleccionarFila()
    {
        int row = tablaResultadosBusqueda.getSelectedRow();
        _productoEscogido = row;
        
        txtDescripcion.setText(tablaResultadosBusqueda.getModel().getValueAt(row, 3).toString());
        
        imagen = new File(_resp.elementAt(_productoEscogido).getRutaImagen());
        FuncionesComunes.cargarImagen(this.jDesktopPane1,imagen);
    }
    
    private void cargarTabla(Vector<Producto> resp){
        eliminarFilasJtable(this.tablaResultadosBusqueda);
        
        if(resp.size() > 0){
            this.tablaResultadosBusqueda.setVisible(true);
            //primero tenemos que decirle a la tabla, la cual se carga con un model, de cuantas filas será
            ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(resp.size());
            
            //cargamos la tabla
            for(int cont = 0; cont < resp.size(); cont++){
                Producto producto = resp.elementAt(cont);
                
                tablaResultadosBusqueda.setValueAt(producto.getNombre(), cont, 0);
                tablaResultadosBusqueda.setValueAt(producto.getPrecio(), cont, 1);
                tablaResultadosBusqueda.setValueAt(producto.getTipoProducto(), cont, 2);
                tablaResultadosBusqueda.setValueAt(producto.getDescripcion(), cont, 3);
            }
        }else{
          JOptionPane.showMessageDialog(null, MENSAJE_NOENCONTRO_NOMBRE, TITULO_NOENCONTRO, JOptionPane.ERROR_MESSAGE);
        }
    }
    
    private void filtrarProductos(Vector<Producto> resp, String filtro)
    {
        eliminarFilasJtable(this.tablaResultadosBusqueda);
        this.tablaResultadosBusqueda.setVisible(true);
        
        //se le pone más uno porque debemos crear un row en blanco para llenar
        int rowBusqueda = tablaResultadosBusqueda.getRowCount()+1;
        
        //primero tenemos que decirle a la tabla, la cual se carga con un model, de cuantas filas será
        ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(rowBusqueda);

        //cargamos la tabla
        for(int cont = 0; cont < resp.size(); cont++){
            Producto producto = resp.elementAt(cont);

            //efectuar el filtro, si da true entonces se agrega a la tabla
            if (producto.getNombre().regionMatches(true, 0, filtro, 0, filtro.length()))
            {
                tablaResultadosBusqueda.setValueAt(producto.getNombre(), rowBusqueda-1, 0);
                tablaResultadosBusqueda.setValueAt(producto.getPrecio(), rowBusqueda-1, 1);
                tablaResultadosBusqueda.setValueAt(producto.getTipoProducto(), rowBusqueda-1, 2);
                tablaResultadosBusqueda.setValueAt(producto.getDescripcion(), rowBusqueda-1, 3);
                
                rowBusqueda = tablaResultadosBusqueda.getRowCount()+1;
                ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(rowBusqueda);
            }
        }
        //se elimina esa última fila en blanco que queda
        ((DefaultTableModel)tablaResultadosBusqueda.getModel()).removeRow(rowBusqueda-1);
    }
    
    private void buscarProducto()
    {            
        _ControladorProducto = ControladorProducto.getInstancia();
        _resp = _ControladorProducto.retornarProductos();
        cargarTabla(_resp);
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnSalir;
    private javax.swing.JButton btnVender;
    private javax.swing.JDesktopPane jDesktopPane1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTabbedPane jtpMantenimiento;
    public javax.swing.JLabel lblCliente;
    public javax.swing.JLabel lblFecha;
    private javax.swing.JScrollPane scrollTabla;
    private javax.swing.JScrollPane scrollTabla1;
    private javax.swing.JTable tablaDetallePedido;
    private javax.swing.JTable tablaResultadosBusqueda;
    private javax.swing.JTextField txtBuscar;
    private javax.swing.JTextField txtCantidad;
    private javax.swing.JTextField txtDescripcion;
    private javax.swing.JTextField txtSubtotal;
    // End of variables declaration//GEN-END:variables
}
